Import-Module VMware.PowerCLI
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Scope Session -Confirm:$false
 
# Connect to source vCenter
$sourceVC = "xxx"
$sourceUser = "xxx"
$sourcePassword = "xxx"
 
Connect-VIServer -Server $sourceVC -User $sourceUser -Password $sourcePassword
 
# Connect to destination vCenter
$destVC = "xxx"
$destUser = "xxx"
$destPassword = "xxx"
 
Connect-VIServer -Server $destVC -User $destUser -Password $destPassword
 
 
# Funktion zum Kopieren von Ordnern und Berechtigungen für AD-Benutzer
function Copy-FolderAndADPermissions {
    param (
        [Parameter(Mandatory = $true)]
        [VMware.VimAutomation.ViCore.Impl.V1.Inventory.FolderImpl]$SourceFolder,
        [Parameter(Mandatory = $true)]
        [VMware.VimAutomation.ViCore.Impl.V1.Inventory.FolderImpl]$DestParentFolder
    )
 
    # Ordner im Ziel erstellen
    $newFolder = New-Folder -Name $SourceFolder.Name -Location $DestParentFolder
 
    # Berechtigungen kopieren, nur für AD-Benutzer, Achtung Escapen! Meine Domain ist lab.home und im VCSA mit LAB\ hinterlegt
    $permissions = Get-VIPermission -Entity $SourceFolder | Where-Object { $_.Principal -match "LAB\\" }
    foreach ($perm in $permissions) {
        try {
            New-VIPermission -Entity $newFolder -Principal $perm.Principal -Role $perm.Role -Propagate $perm.Propagate
        }
        catch {
            Write-Warning "Konnte Berechtigung für $($perm.Principal) nicht setzen: $_"
        }
    }
 
    # Rekursiv Unterordner kopieren
    $subFolders = Get-Folder -Location $SourceFolder
    foreach ($subFolder in $subFolders) {
        Copy-FolderAndADPermissions -SourceFolder $subFolder -DestParentFolder $newFolder
    }
}
 
# Übergeordneten Quellordner angeben 
$sourceParentFolderName = "XXX"  # Nur den Namen des Ordners angeben
$sourceDatacenter = Get-Datacenter -Name "Homelab" #VCSA Datacenter angeben
 
# Quellordner abrufen
$sourceParentFolder = Get-Folder -Name $sourceParentFolderName -Location $sourceDatacenter
 
# Prüfen, ob der Quellordner gefunden wurde
if ($sourceParentFolder -eq $null) {
    Write-Error "Der Quellordner '$sourceParentFolderName' konnte nicht gefunden werden."
    exit
}
 
# Zielordner angeben & DataCenter
$destParentFolderName = "Copy"  # Ersetze mit dem tatsächlichen Namen des Zielordners
$destParentFolder = Get-Folder -Name $destParentFolderName -Location (Get-Datacenter -Name "Nested Lab Site A")
 
# Prüfen, ob der Zielordner gefunden wurde
if ($destParentFolder -eq $null) {
    Write-Error "Der Zielordner '$destParentFolderName' konnte nicht gefunden werden."
    exit
}
 
# Ordner und Berechtigungen für AD-Benutzer kopieren
Copy-FolderAndADPermissions -SourceFolder $sourceParentFolder -DestParentFolder $destParentFolder
 
# Trennung von vCenter-Servern
Disconnect-VIServer -Server $sourceVC -Confirm:$false
Disconnect-VIServer -Server $destVC -Confirm:$false